﻿using NUnit.Framework;

namespace NJamb.NUnit.Tests
{
	[TestFixture]
	public class SelfDocumentingFixtureTests
	{
		[Test]
		public void METHOD_NAME()
		{
			// arrange

			/* something like
			 * 
			 * The test that proves Target ShouldSubtractFromRichProperty is:
			 * Given Target.SomeRichProperty.YieldsSomeValue is equal to 20
			 * Given Target.Method() throws an InvalidStateException
			 *       because: It's not ready and this is my custom comment to say so
			 * Given SomeOtherStaticExpression.ProducesASequence has at least 2 elements satisfying y => y.Okay
			 * 
			 * When Target.SubtractFromRichProperty(11) is called
			 * 
			 * Then Target.SomeRichProperty.YieldsSomeValue is equal to 9
			 *   and Target.Method() does not throw
			 *   and SomeOtherStaticExpression.ProducesASequence is sequence-equal to {foo, bar}
			 * 
			 * Thoughts
			 * - restate invariants? make that an option
			 * - "As a <role>"?  Make a BDD flavor that allows that syntax
			 * - Suppose some outcomes are more semantically important, and others are just assumptions.  
			 *     Use order of declaration?  
			 *     Allow markup syntaxes?
			 * - Where to mention the type that Target is?  Just use the type name instead of "Target"?
			 * - Do we use the name of the test?  Seems we have to cite it, for crossreferencing
			 * - assume static behavior is not interesting.  
			 *     There might be utility methods but those don't have BDD behavior, we hope.
			 * - Construction: given a Target built via blah blah blah?
			 * - Separate the framing assumptions from the direct behavioral inputs? output is 
			 *     Given/When/Then/Assuming (and maybe ForConstructionVia)
			 * - tabular output is reasonable, too
			 * - or maybe XML output that could be formatted howsoever: text, html, foo-globule-icreactive-ish
			 * - 
			 */

			// act
			//_testSubject.METHOD_NAME();

			// assert

			//Assert.Ignore("WIP");
			Assert.Pass("Whee");
		}
	}
}
